/**
 * @file sysconfig.h
 * @brief 系统配置管理
 * @details 管理云存储系统的所有配置项
 */

#pragma once

#include <string>
#include <cstdint>

/**
 * @class Config
 * @brief 系统配置管理类
 * @details 提供系统配置的统一管理和访问接口
 */
class Config 
{
public:
    /**
     * @brief 初始化配置
     */
    static void init();
    
    /**
     * @brief 获取服务器监听端口
     * @return int 端口号
     */
    static int getPort() { return port_; }
    
    /**
     * @brief 获取存储根目录
     * @return const std::string& 存储目录路径
     */
    static const std::string& getStorageRoot() { return storage_root_; }
    
    /**
     * @brief 获取临时文件目录
     * @return const std::string& 临时目录路径
     */
    static const std::string& getTempDir() { return temp_dir_; }
    
    /**
     * @brief 获取数据库文件路径
     * @return const std::string& 数据库文件路径
     */
    static const std::string& getDatabasePath() { return database_path_; }
    
    /**
     * @brief 获取最大文件大小
     * @return uint64_t 最大文件大小（字节）
     */
    static uint64_t getMaxFileSize() { return max_file_size_; }
    
    /**
     * @brief 获取上传缓冲区大小
     * @return size_t 缓冲区大小（字节）
     */
    static size_t getUploadBufferSize() { return upload_buffer_size_; }
    
    /**
     * @brief 获取最大并发连接数
     * @return int 最大并发连接数
     */
    static int getMaxConnections() { return max_connections_; }
    
    /**
     * @brief 获取线程池大小
     * @return int 线程池大小
     */
    static int getThreadPoolSize() { return thread_pool_size_; }

private:
    inline static int port_ =  8080;                           ///< 服务器端口
    inline static std::string storage_root_ = "./storage";           ///< 存储根目录
    inline static std::string temp_dir_ = "./storage/temp";              ///< 临时文件目录
    inline static std::string database_path_ = "./storage/meta/files.db";         ///< 数据库文件路径
    inline static uint64_t max_file_size_ = 1024 * 1024 * 1024;            ///< 最大文件大小
    inline static size_t upload_buffer_size_ = 64 * 1024;         ///< 上传缓冲区大小
    inline static int max_connections_ = 1000;               ///< 最大并发连接数
    inline static int thread_pool_size_ = 8;              ///< 线程池大小
}; 